package cn.passlink.bletoothchat.Tools.UserId;

import java.util.zip.CRC32;

public class GroupIDGenerator {
    public static String generateGroupID(String groupName, String phoneNumber) {
        String input = groupName + phoneNumber;
        long crcValue = getCRC32(input);
        String groupId = formatAsEightDigits(crcValue);
        return groupId;
    }

    private static long getCRC32(String input) {
        CRC32 crc32 = new CRC32();
        crc32.update(input.getBytes());
        return crc32.getValue();
    }

    private static String formatAsEightDigits(long value) {
        // 通过取模运算确保值在 8 位数范围内
        long formattedValue = value % 100_000_000L;
        return String.format("%08d", formattedValue);
    }

    public static String convertToUniqueString(String input) {
        // 将输入字符串进行哈希运算得到长整型值
        long hashValue = calculateHash(input);

        // 将长整型值转换为小写的十六进制字符串
        String hexString = Long.toHexString(hashValue);

        // 如果字符串长度不足8位，则在前面补0
        while (hexString.length() < 8) {
            hexString = "0" + hexString;
        }

        // 取字符串的后8位作为结果
        String uniqueString = hexString.substring(hexString.length() - 8);

        return uniqueString;
    }

    private static long calculateHash(String input) {
        // 定义哈希函数，这里使用Java内置的hashCode()方法
        int hashCode = input.hashCode();

        // 使用乘法和异或运算对哈希值进行混洗
        long mixedHash = ((long) hashCode * 2654435761L) ^ ((long) hashCode >>> 32);

        return mixedHash;
    }
}